﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Faculty
{
    class Generator
    {
        Random rand = new Random();

        string[] menLastNames = { "Иванов", "Петров", "Сидоров", "Иваненко", "Петренко", "Сидоренко", "Иванов-оглы", "Петров-оглы", "Сидоров-оглы", "Шовковский", "Ващук", "Головко", "Дмитрулин", "Кардаш", "Гусин", "Косовский", "Хацкевич", "Белькевич", "Ребров", "Шевченко", "Лужный", "Кернозенко", "Езерский", "Кирюхин", "Фёдоров", "Михайленко", "Коновалов", "Герасименко", "Маковский", "Радченко" };
        string[] menFirstNames = { "Александр", "Алексей", "Антон", "Андрей", "Иван", "Пётр", "Илья", "Максим", "Сергей", "Роман", "Константин", "Владислав", "Дмитрий", "Владимир", "Олег" };
        string[] menSurnames = { "Александрович", "Алексеевич", "Антонович", "Андреевич", "Иванович", "Петрович", "Юрьевич", "Сергеевич", "Романович", "Константинович", "Владиславович", "Дмитриевич", "Владимирович" };
        string[] womenLastNames = { "Иванова", "Петрова", "Сидорова", "Иваненко", "Петренко", "Сидоренко", "Шовковская", "Ващук", "Головко", "Дмитрулина", "Кардаш", "Гусина", "Косовская", "Хацкевич", "Белькевич", "Реброва", "Шевченко", "Лужная", "Кернозенко", "Езерская", "Кирюхина", "Фёдорова", "Михайленко", "Коновалова", "Герасименко", "Маковская", "Радченко" };
        string[] womenFirstNames = { "Александра", "Антонина", "Анастасия", "Людмила", "Ольга", "Тамара", "Екатерина", "Анна", "Евгения", "Лилия", "Елена", "Татьяна", "Елизавета", "Виктория", "Юлия", "Алла", "Валерия", "Дарья", "Светлана" };
        string[] womenSurnames = { "Александровна", "Алексеевна", "Антоновна", "Андреевна", "Ивановна", "Петровна", "Юрьевна", "Сергеевна", "Романовна", "Константиновна", "Владиславовна", "Дмитриевна", "Владимировна" };

        public Student GenerateStudent()
        {
            Student newStudent;
            if (rand.Next(2) == 0)
            {
                newStudent = new Student(GenerateMenFirstName(), GenerateMenLastName(), Sex.Male, GenerateDayOfBirth());
            }
            else
            {
                newStudent = new Student(GenerateWomanFirstName(), GenerateWomanLastName(), Sex.Female, GenerateDayOfBirth());
            }
            GenerateMarksList(newStudent);
            return newStudent;
        }

        public string GenerateName()
        {
            if (rand.Next(2) == 0)
                return GenerateManName();
            else
                return GenerateWomanName();
        }

        string GenerateWomanName()
        {
            return String.Format("{0} {1} {2}", GenerateWomanLastName(), GenerateWomanFirstName(), GenerateWomanSurname());
        }

        string GenerateManName()
        {
            return String.Format("{0} {1} {2}", GenerateMenLastName(), GenerateMenFirstName(), GenerateMenSurname());
        }

        string GenerateMenFirstName()
        {
            return menFirstNames[rand.Next(menFirstNames.Length)];
        }

        string GenerateMenLastName()
        {
            return menLastNames[rand.Next(menLastNames.Length)];
        }

        string GenerateMenSurname()
        {
            return menSurnames[rand.Next(menSurnames.Length)];
        }

        string GenerateWomanFirstName()
        {
            return womenFirstNames[rand.Next(womenFirstNames.Length)];
        }

        string GenerateWomanLastName()
        {
            return womenLastNames[rand.Next(womenLastNames.Length)];
        }

        string GenerateWomanSurname()
        {
            return womenSurnames[rand.Next(womenSurnames.Length)];
        }

        DateTime GenerateDayOfBirth()
        {
            return new DateTime(rand.Next(1980, 2001), rand.Next(1, 13), rand.Next(1, 29));
        }

        void GenerateMarksList(Student student, int markCount = 10)
        {
            for (int i = 0; i < markCount; i++)
            {
                student.SetMark(rand.Next(11));
            }
        }

    }
}
